What we will cover today:
Lets work with the Lake Trout data as the weights are pretty cool and the assumptions may or may not hold
This is easily translated into any of the other dataframes you might want to use
lake trout
# the stuff above controls the output and is also set at the top so dont need here
# Load the pine needle data
# Use here() function to specify the path
lt_df <- read_csv("data/lake_trout.csv")
# Examine the first few rows
head(df)
1 function (x, df1, df2, ncp, log = FALSE)
2 {
3 if (missing(ncp))
4 .Call(C_df, x, df1, df2, log)
5 else .Call(C_dnf, x, df1, df2, ncp, log)
6 }
T-tests are parametric tests
Random sampling
Normality
Equal variance
No outliers
Basic assumptions of parametric t-tests:
Random sampling
Normality
Equal variance
No outliers
Random sampling:
samples are randomly collected from populations; part of experimental design
Necessary for sample -> population inference
<>
Basic assumptions of parametric t-tests:
NE 12 as if we were going to do a one sample T Test
ne12_dataBasic assumptions of parametric t-tests:
NE 12 as if we were going to do a one sample T Test
ne12_data[1] "Null hypothesis is that data is normally distributed"
Shapiro-Wilk normality test
data: ne12_data$length_mm
W = 0.94528, p-value = 1.56e-09
Basic assumptions of parametric t-tests:
Equal variance: samples are from populations with similar degree of variability
- equal variance
- random sampling
- no outliers
isl_ne12_df <- lt_df %>% filter(lake %in% c("NE 12", "Island Lake"))
ne12_island_box_plot <- isl_ne12_df %>%
ggplot(aes(x=lake, y = mass_g, color=lake)) +
geom_boxplot()+
theme_minimal()
# ne12_island_box_plot
ne12_island_qq_plot <- isl_ne12_df %>%
# filter(lake =="NE 12") %>%
ggplot(aes(sample = mass_g , color=lake)) +
stat_qq() +
stat_qq_line() +
labs( x = "Theoretical Quantiles", y = "Sample Quantiles") +
theme_minimal()
ne12_island_box_plot +ne12_island_qq_plot+plot_layout(guides="collect")<>
Lets compare a parametric T-Test to a Welch’s t-test
[1] "Standard t-test results for lenght_mm:"
Two Sample t-test
data: mass_g by lake
t = 14.181, df = 330, p-value < 2.2e-16
alternative hypothesis: true difference in means between group Island Lake and group NE 12 is not equal to 0
95 percent confidence interval:
2266.304 2996.360
sample estimates:
mean in group Island Lake mean in group NE 12
3165.0000 533.6677
[1] "Welch's t-test results for lenght_mm:"
Welch Two Sample t-test
data: mass_g by lake
t = 5.1368, df = 9.0578, p-value = 0.0006016
alternative hypothesis: true difference in means between group Island Lake and group NE 12 is not equal to 0
95 percent confidence interval:
1473.676 3788.989
sample estimates:
mean in group Island Lake mean in group NE 12
3165.0000 533.6677
Rank-based tests: no assumptions about distribution (non-parametric)
Ranks of data: observations assigned ranks, sums (and signs for paired tests) of ranks for groups compared
Mann-Whitney U test common alternative to independent samples t-test
Wilcoxon signed-rank test is alternative to paired t-test
<
[1] "Mann-Whitney U test results length:"
Wilcoxon rank sum test with continuity correction
data: mass_g by lake
W = 3205.5, p-value = 9.506e-08
alternative hypothesis: true location shift is not equal to 0
Permutation tests based on resampling: reshuffling of original data
Resampling allows parameter estimation when distribution unknown, including SEs and CIs of statistics (means, medians)
Common approach is bootstrap: resample sample with replacement many times, recalculate sample stats
Use the perm package
Ho: µA = µB
Ha: µA ≠µB
Calculates the difference ∆ in means between two groups
<!
library(perm)
# Prepare data for permutation test
ne12_perm_data <- isl_ne12_df %>%
filter(lake == "NE 12") %>%
pull(length_mm)
# Randomly sample exactly 25 observations from NE 12 (set seed for reproducibility)
set.seed(123)
ne12_perm_data <- sample(ne12_perm_data, size = 25, replace = FALSE)
island_perm_data <- isl_ne12_df %>%
filter(lake == "Island Lake") %>%
pull(length_mm)
# Calculate the observed difference in means
observed_diff <- mean(ne12_perm_data, na.rm = TRUE) - mean(island_perm_data, na.rm = TRUE)
# Perform permutation test for difference in means using perm package
permTS(ne12_perm_data, island_perm_data,
alternative = "two.sided",
method = "exact.mc",
control = permControl(nmc = 10000))
Exact Permutation Test Estimated by Monte Carlo
data: GROUP 1 and GROUP 2
p-value = 2e-04
alternative hypothesis: true mean GROUP 1 - mean GROUP 2 is not equal to 0
sample estimates:
mean GROUP 1 - mean GROUP 2
-333.08
p-value estimated from 10000 Monte Carlo replications
99 percent confidence interval on p-value:
0.000000000 0.001059383